package me.kany.utils.mathutils;

import java.math.BigDecimal;

/**
 * Created by Jason.Wang on 2016/6/24.
 * 主要用来的解决当前数学计算的精度丢失问题，作为一个参考。
 */
public class DoubleMath {

    /**
     * 进行加法运算
     * @param d1
     * @param d2
     * @return
     */
    public static double add(double d1, double d2) {
        BigDecimal b1 = BigDecimal.valueOf(d1);
        BigDecimal b2 = BigDecimal.valueOf(d2);
        return b1.add(b2).doubleValue();
    }

    /**
     * 减法运算
     * @param d1
     * @param d2
     * @return
     */
    public static double sub(double d1, double d2) {
        BigDecimal b1 = BigDecimal.valueOf(d1);
        BigDecimal b2 = BigDecimal.valueOf(d2);
        return b1.subtract(b2).doubleValue();
    }

    /**
     * 乘法运算
     * @param d1
     * @param d2
     * @return
     */
    public static double mul(double d1, double d2) {
        BigDecimal b1 = BigDecimal.valueOf(d1);
        BigDecimal b2 = BigDecimal.valueOf(d2);
        return b1.multiply(b2).doubleValue();
    }

    /**
     * 进行除法运算
     * @param d1
     * @param d2
     * @param len
     * @return
     */
    public static double div(double d1, double d2, int len) {
        BigDecimal b1 = BigDecimal.valueOf(d1);
        BigDecimal b2 = BigDecimal.valueOf(d2);
        return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /**
     * 进行四舍五入操作
     * @param d
     * @param len
     * @return
     */
    public static double round(double d, int len) {
        // 进行四舍五入操作
        BigDecimal b1 = BigDecimal.valueOf(d);
        BigDecimal b2 = BigDecimal.valueOf(1);
        // 任何一个数字除以1都是原数字
        // ROUND_HALF_UP是BigDecimal的一个常量，表示进行四舍五入的操作
        return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}
